// src/permission.js

import { useUserStore } from '@/store/user.js'
import pinia from '@/store'

// 2. 定义需要登录才能访问的页面路径白名单
const needLoginPages = [
  '/pages/settings/index',
  '/pages/record/index',
  '/pages/record/acupoint/index',
  '/pages/zhen/index',
  '/pages/record/tongue/index',
  '/pages/record/face/index',
  '/pages/record/pulse/index'
  // 在这里继续添加其他需要登录的页面
]

export function setupPermission() {
  const methods = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab']

  methods.forEach(method => {
    uni.addInterceptor(method, {
      invoke(args) {
        const userStore = useUserStore(pinia)

        // 调试日志，方便排查问题
        console.log(`[路由拦截] 目标: ${args.url}, 登录状态: ${userStore.isLogin}`)

        // 检查目标路径是否需要登录
        const isNeedLogin = needLoginPages.some(pagePath => {
          // 兼容 H5 环境下可能不带'/'开头的 url
          const targetUrl = args.url.startsWith('/') ? args.url : '/' + args.url
          return targetUrl.startsWith(pagePath)
        })

        // 如果需要登录但用户未登录，则执行拦截
        if (isNeedLogin && !userStore.isLogin) {
          console.log('[路由拦截] 拦截！跳转到登录页。')

          uni.showToast({
            title: '请先登录',
            icon: 'none'
          })

          uni.navigateTo({
            url: '/pages/login/index'
          })

          // 返回 false 会阻止本次跳转
          return false
        }

        console.log('[路由拦截] 放行。')
        // 已登录或页面无需登录，放行
        return true
      },
      fail(err) {
        console.error(`[路由拦截] 失败 (${method}):`, err)
      }
    })
  })
}
